#include <stdio.h>
#include "queue_1.h"

//队列的初始化函数
void queue_init(queue* p_queue) {
	p_queue->tail = 0;	//下一个数字应该放置下标为0的存储区里
	p_queue->head = 0;	//head等于tail表示队列里没有数字
}

//队列的清理函数
void queue_deinit(queue* p_queue) {
	p_queue->tail = 0;	//下一个数字应该放置下标为0的存储区里
	p_queue->head = 0;	//head等于tail表示队列里没有数字
}

//获得队列里数字个数的函数
int queue_size(const queue* p_queue) {
	return p_queue->tail - p_queue->head;
}

//判断队列是否空的函数
int queue_empty(const queue* p_queue) {
	return p_queue->head == p_queue->tail;
}

//判断队列是否满的函数
int queue_full(const queue* p_queue) {
	return p_queue->tail >= SIZE;
}

//向队列里加入数字的函数
int queue_push(queue* p_queue, int val) {
	if(p_queue->tail >= SIZE) {
	//如果队列已经满了就不能加入数字了
		return 0;
	}
	p_queue->buf[p_queue->tail] = val;	//把新数字记录到数组里以tail做下标的存储区里
	p_queue->tail++;	//把tail向后移动一位
	return 1;
}

//从队列里获取数字的函数（同时删除数字）
int queue_pop(queue* p_queue, int* p_val) {
	if(p_queue->head == p_queue->tail) {
	//如果队列是空的就不能获得数字了
		return 0;
	}
	*p_val = p_queue->buf[p_queue->head];	//把数组里以head做下标的存储区里的数字传递给调用函数
	p_queue->head++;	//把head向后移动一位，这表示删除这个数字
	return 1;
}

//从队列里获得数字的函数（不会删除数字）
int queue_top(const queue* p_queue, int* p_val) {
	if(p_queue->head == p_queue->tail) {
		return 0;
	}
	*p_val = p_queue->buf[p_queue->head];
	return 0;
}
